{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import warnings\n",
    "from catboost import CatBoostRegressor\n",
    "from lightgbm import LGBMRegressor\n",
    "from xgboost import XGBRegressor\n",
    "from sklearn.model_selection import KFold\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "warnings.filterwarnings('ignore')\n",
    "%matplotlib inline\n",
    "pd.set_option('max_column', 1000)\n",
    "pd.set_option('max_rows', 1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "train = pd.read_csv('Train.csv')\n",
    "test = pd.read_csv('Test.csv')\n",
    "sample_sub = pd.read_csv('Sample_Submission.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SalesInMillions</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>1.497533</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>2.368795</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>2.630505</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>2.506086</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>1.970574</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SalesInMillions\n",
       "0         1.497533\n",
       "1         2.368795\n",
       "2         2.630505\n",
       "3         2.506086\n",
       "4         1.970574"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample_sub.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>CONSOLE</th>\n",
       "      <th>YEAR</th>\n",
       "      <th>CATEGORY</th>\n",
       "      <th>PUBLISHER</th>\n",
       "      <th>RATING</th>\n",
       "      <th>CRITICS_POINTS</th>\n",
       "      <th>USER_POINTS</th>\n",
       "      <th>SalesInMillions</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>2860</td>\n",
       "      <td>ds</td>\n",
       "      <td>2008</td>\n",
       "      <td>role-playing</td>\n",
       "      <td>Nintendo</td>\n",
       "      <td>E</td>\n",
       "      <td>2.833333</td>\n",
       "      <td>0.303704</td>\n",
       "      <td>1.779257</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>731</td>\n",
       "      <td>wii</td>\n",
       "      <td>2012</td>\n",
       "      <td>simulation</td>\n",
       "      <td>Konami Digital Entertainment</td>\n",
       "      <td>E10+</td>\n",
       "      <td>13.200000</td>\n",
       "      <td>1.640000</td>\n",
       "      <td>0.215050</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>495</td>\n",
       "      <td>pc</td>\n",
       "      <td>2019</td>\n",
       "      <td>shooter</td>\n",
       "      <td>Activision</td>\n",
       "      <td>M</td>\n",
       "      <td>4.562500</td>\n",
       "      <td>0.006410</td>\n",
       "      <td>0.534402</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>2641</td>\n",
       "      <td>ps2</td>\n",
       "      <td>2002</td>\n",
       "      <td>sports</td>\n",
       "      <td>Electronic Arts</td>\n",
       "      <td>E</td>\n",
       "      <td>4.181818</td>\n",
       "      <td>0.326923</td>\n",
       "      <td>1.383964</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>811</td>\n",
       "      <td>ps3</td>\n",
       "      <td>2013</td>\n",
       "      <td>action</td>\n",
       "      <td>Activision</td>\n",
       "      <td>M</td>\n",
       "      <td>2.259259</td>\n",
       "      <td>0.032579</td>\n",
       "      <td>0.082671</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     ID CONSOLE  YEAR      CATEGORY                     PUBLISHER RATING  \\\n",
       "0  2860      ds  2008  role-playing                      Nintendo      E   \n",
       "1   731     wii  2012    simulation  Konami Digital Entertainment   E10+   \n",
       "2   495      pc  2019       shooter                    Activision      M   \n",
       "3  2641     ps2  2002        sports               Electronic Arts      E   \n",
       "4   811     ps3  2013        action                    Activision      M   \n",
       "\n",
       "   CRITICS_POINTS  USER_POINTS  SalesInMillions  \n",
       "0        2.833333     0.303704         1.779257  \n",
       "1       13.200000     1.640000         0.215050  \n",
       "2        4.562500     0.006410         0.534402  \n",
       "3        4.181818     0.326923         1.383964  \n",
       "4        2.259259     0.032579         0.082671  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>CONSOLE</th>\n",
       "      <th>YEAR</th>\n",
       "      <th>CATEGORY</th>\n",
       "      <th>PUBLISHER</th>\n",
       "      <th>RATING</th>\n",
       "      <th>CRITICS_POINTS</th>\n",
       "      <th>USER_POINTS</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>4310</td>\n",
       "      <td>ps2</td>\n",
       "      <td>2008</td>\n",
       "      <td>action</td>\n",
       "      <td>Tecmo Koei</td>\n",
       "      <td>T</td>\n",
       "      <td>3.928571</td>\n",
       "      <td>0.482353</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>4011</td>\n",
       "      <td>psp</td>\n",
       "      <td>2007</td>\n",
       "      <td>strategy</td>\n",
       "      <td>Atari</td>\n",
       "      <td>E10+</td>\n",
       "      <td>5.538462</td>\n",
       "      <td>0.071795</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>2185</td>\n",
       "      <td>ps2</td>\n",
       "      <td>2004</td>\n",
       "      <td>shooter</td>\n",
       "      <td>Electronic Arts</td>\n",
       "      <td>T</td>\n",
       "      <td>3.034483</td>\n",
       "      <td>0.062044</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>1644</td>\n",
       "      <td>x</td>\n",
       "      <td>2006</td>\n",
       "      <td>action</td>\n",
       "      <td>Electronic Arts</td>\n",
       "      <td>E</td>\n",
       "      <td>2.913043</td>\n",
       "      <td>0.880000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>188</td>\n",
       "      <td>3ds</td>\n",
       "      <td>2011</td>\n",
       "      <td>racing</td>\n",
       "      <td>Ubisoft</td>\n",
       "      <td>E10+</td>\n",
       "      <td>1.162162</td>\n",
       "      <td>0.183333</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     ID CONSOLE  YEAR  CATEGORY        PUBLISHER RATING  CRITICS_POINTS  \\\n",
       "0  4310     ps2  2008    action       Tecmo Koei      T        3.928571   \n",
       "1  4011     psp  2007  strategy            Atari   E10+        5.538462   \n",
       "2  2185     ps2  2004   shooter  Electronic Arts      T        3.034483   \n",
       "3  1644       x  2006    action  Electronic Arts      E        2.913043   \n",
       "4   188     3ds  2011    racing          Ubisoft   E10+        1.162162   \n",
       "\n",
       "   USER_POINTS  \n",
       "0     0.482353  \n",
       "1     0.071795  \n",
       "2     0.062044  \n",
       "3     0.880000  \n",
       "4     0.183333  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((3506, 9), (1503, 8))"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.shape, test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Feature Engineering"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "train['points'] = train['CRITICS_POINTS'] * train['USER_POINTS']\n",
    "test['points'] = test['CRITICS_POINTS'] * test['USER_POINTS']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "train['Critic_point_cat_mean'] = train.groupby('CATEGORY')['CRITICS_POINTS'].transform('mean')\n",
    "train['Critic_point_cat_std'] = train.groupby('CATEGORY')['CRITICS_POINTS'].transform('std')\n",
    "\n",
    "test['Critic_point_cat_mean'] = test.groupby('CATEGORY')['CRITICS_POINTS'].transform('mean')\n",
    "test['Critic_point_cat_std'] = test.groupby('CATEGORY')['CRITICS_POINTS'].transform('std')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "train['user_point_cat_mean'] = train.groupby('CATEGORY')['USER_POINTS'].transform('mean')\n",
    "train['user_point_cat_std'] = train.groupby('CATEGORY')['USER_POINTS'].transform('std')\n",
    "\n",
    "test['user_point_cat_mean'] = test.groupby('CATEGORY')['USER_POINTS'].transform('mean')\n",
    "test['user_point_cat_std'] = test.groupby('CATEGORY')['USER_POINTS'].transform('std')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "train['n_year_rating'] = train.groupby('YEAR')['RATING'].transform('nunique')\n",
    "test['n_year_rating'] = test.groupby('YEAR')['RATING'].transform('nunique')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "train['n_console_category'] = train.groupby('PUBLISHER')['CATEGORY'].transform('nunique')\n",
    "test['n_console_category'] = test.groupby('CONSOLE')['CATEGORY'].transform('nunique')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "train['n_publisher_console'] = train.groupby('PUBLISHER')['CONSOLE'].transform('nunique')\n",
    "test['n_publisher_console'] = test.groupby('PUBLISHER')['CONSOLE'].transform('nunique')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "train['user_publisher_mean'] = train.groupby('PUBLISHER')['USER_POINTS'].transform('mean')\n",
    "train['user_publisher_std'] = train.groupby('PUBLISHER')['USER_POINTS'].transform('std')\n",
    "\n",
    "test['user_publisher_mean'] = test.groupby('PUBLISHER')['USER_POINTS'].transform('mean')\n",
    "test['user_publisher_std'] = test.groupby('PUBLISHER')['USER_POINTS'].transform('std')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "train['USER_POINTS'] = np.log1p(train['USER_POINTS'])\n",
    "test['USER_POINTS'] = np.log1p(test['USER_POINTS'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "train['CRITICS_POINTS'] = np.log1p(train['CRITICS_POINTS'])\n",
    "test['CRITICS_POINTS'] = np.log1p(test['CRITICS_POINTS'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>CONSOLE</th>\n",
       "      <th>YEAR</th>\n",
       "      <th>CATEGORY</th>\n",
       "      <th>PUBLISHER</th>\n",
       "      <th>RATING</th>\n",
       "      <th>CRITICS_POINTS</th>\n",
       "      <th>USER_POINTS</th>\n",
       "      <th>SalesInMillions</th>\n",
       "      <th>points</th>\n",
       "      <th>Critic_point_cat_mean</th>\n",
       "      <th>Critic_point_cat_std</th>\n",
       "      <th>user_point_cat_mean</th>\n",
       "      <th>user_point_cat_std</th>\n",
       "      <th>n_year_rating</th>\n",
       "      <th>n_console_category</th>\n",
       "      <th>n_publisher_console</th>\n",
       "      <th>user_publisher_mean</th>\n",
       "      <th>user_publisher_std</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>2860</td>\n",
       "      <td>ds</td>\n",
       "      <td>2008</td>\n",
       "      <td>role-playing</td>\n",
       "      <td>Nintendo</td>\n",
       "      <td>E</td>\n",
       "      <td>1.343735</td>\n",
       "      <td>0.265209</td>\n",
       "      <td>1.779257</td>\n",
       "      <td>0.860494</td>\n",
       "      <td>3.030737</td>\n",
       "      <td>2.530770</td>\n",
       "      <td>0.258094</td>\n",
       "      <td>0.372459</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>6</td>\n",
       "      <td>0.194803</td>\n",
       "      <td>0.302443</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>731</td>\n",
       "      <td>wii</td>\n",
       "      <td>2012</td>\n",
       "      <td>simulation</td>\n",
       "      <td>Konami Digital Entertainment</td>\n",
       "      <td>E10+</td>\n",
       "      <td>2.653242</td>\n",
       "      <td>0.970779</td>\n",
       "      <td>0.215050</td>\n",
       "      <td>21.648000</td>\n",
       "      <td>4.637810</td>\n",
       "      <td>3.459926</td>\n",
       "      <td>0.447938</td>\n",
       "      <td>0.399493</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>13</td>\n",
       "      <td>0.501914</td>\n",
       "      <td>0.524219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>495</td>\n",
       "      <td>pc</td>\n",
       "      <td>2019</td>\n",
       "      <td>shooter</td>\n",
       "      <td>Activision</td>\n",
       "      <td>M</td>\n",
       "      <td>1.716048</td>\n",
       "      <td>0.006390</td>\n",
       "      <td>0.534402</td>\n",
       "      <td>0.029247</td>\n",
       "      <td>2.655283</td>\n",
       "      <td>2.097455</td>\n",
       "      <td>0.253722</td>\n",
       "      <td>0.392199</td>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>16</td>\n",
       "      <td>0.441186</td>\n",
       "      <td>0.466400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>2641</td>\n",
       "      <td>ps2</td>\n",
       "      <td>2002</td>\n",
       "      <td>sports</td>\n",
       "      <td>Electronic Arts</td>\n",
       "      <td>E</td>\n",
       "      <td>1.645156</td>\n",
       "      <td>0.282863</td>\n",
       "      <td>1.383964</td>\n",
       "      <td>1.367133</td>\n",
       "      <td>4.460985</td>\n",
       "      <td>3.110016</td>\n",
       "      <td>0.544185</td>\n",
       "      <td>0.508669</td>\n",
       "      <td>3</td>\n",
       "      <td>12</td>\n",
       "      <td>16</td>\n",
       "      <td>0.356344</td>\n",
       "      <td>0.412553</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>811</td>\n",
       "      <td>ps3</td>\n",
       "      <td>2013</td>\n",
       "      <td>action</td>\n",
       "      <td>Activision</td>\n",
       "      <td>M</td>\n",
       "      <td>1.181500</td>\n",
       "      <td>0.032060</td>\n",
       "      <td>0.082671</td>\n",
       "      <td>0.073605</td>\n",
       "      <td>3.853440</td>\n",
       "      <td>3.469185</td>\n",
       "      <td>0.362329</td>\n",
       "      <td>0.417877</td>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>16</td>\n",
       "      <td>0.441186</td>\n",
       "      <td>0.466400</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     ID CONSOLE  YEAR      CATEGORY                     PUBLISHER RATING  \\\n",
       "0  2860      ds  2008  role-playing                      Nintendo      E   \n",
       "1   731     wii  2012    simulation  Konami Digital Entertainment   E10+   \n",
       "2   495      pc  2019       shooter                    Activision      M   \n",
       "3  2641     ps2  2002        sports               Electronic Arts      E   \n",
       "4   811     ps3  2013        action                    Activision      M   \n",
       "\n",
       "   CRITICS_POINTS  USER_POINTS  SalesInMillions     points  \\\n",
       "0        1.343735     0.265209         1.779257   0.860494   \n",
       "1        2.653242     0.970779         0.215050  21.648000   \n",
       "2        1.716048     0.006390         0.534402   0.029247   \n",
       "3        1.645156     0.282863         1.383964   1.367133   \n",
       "4        1.181500     0.032060         0.082671   0.073605   \n",
       "\n",
       "   Critic_point_cat_mean  Critic_point_cat_std  user_point_cat_mean  \\\n",
       "0               3.030737              2.530770             0.258094   \n",
       "1               4.637810              3.459926             0.447938   \n",
       "2               2.655283              2.097455             0.253722   \n",
       "3               4.460985              3.110016             0.544185   \n",
       "4               3.853440              3.469185             0.362329   \n",
       "\n",
       "   user_point_cat_std  n_year_rating  n_console_category  n_publisher_console  \\\n",
       "0            0.372459              4                  12                    6   \n",
       "1            0.399493              4                  12                   13   \n",
       "2            0.392199              4                  11                   16   \n",
       "3            0.508669              3                  12                   16   \n",
       "4            0.417877              4                  11                   16   \n",
       "\n",
       "   user_publisher_mean  user_publisher_std  \n",
       "0             0.194803            0.302443  \n",
       "1             0.501914            0.524219  \n",
       "2             0.441186            0.466400  \n",
       "3             0.356344            0.412553  \n",
       "4             0.441186            0.466400  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = train.drop(columns='SalesInMillions')\n",
    "y = train['SalesInMillions']\n",
    "tes = test"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Modelling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 3, 4, 5])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cate_features_index = np.where(X.dtypes == object) [0]; cate_features_index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0:\tlearn: 2.6436070\ttest: 2.6436070\ttest1: 1.7488780\tbest: 1.7488780 (0)\ttotal: 82.4ms\tremaining: 1h 8m 40s\n",
      "100:\tlearn: 2.2648078\ttest: 2.2782165\ttest1: 1.6279626\tbest: 1.6279626 (100)\ttotal: 688ms\tremaining: 5m 39s\n",
      "200:\tlearn: 2.0285070\ttest: 2.0532824\ttest1: 1.5745291\tbest: 1.5745291 (200)\ttotal: 1.24s\tremaining: 5m 6s\n",
      "300:\tlearn: 1.8997695\ttest: 1.9220228\ttest1: 1.5612457\tbest: 1.5589707 (287)\ttotal: 1.77s\tremaining: 4m 52s\n",
      "400:\tlearn: 1.7907047\ttest: 1.8170910\ttest1: 1.5671953\tbest: 1.5589707 (287)\ttotal: 2.34s\tremaining: 4m 49s\n",
      "500:\tlearn: 1.7054885\ttest: 1.7372361\ttest1: 1.5799522\tbest: 1.5589707 (287)\ttotal: 2.94s\tremaining: 4m 50s\n",
      "600:\tlearn: 1.6358173\ttest: 1.6756477\ttest1: 1.5922449\tbest: 1.5589707 (287)\ttotal: 3.65s\tremaining: 5m\n",
      "700:\tlearn: 1.5841654\ttest: 1.6323576\ttest1: 1.6005942\tbest: 1.5589707 (287)\ttotal: 4.36s\tremaining: 5m 6s\n",
      "Stopped by overfitting detector  (500 iterations wait)\n",
      "\n",
      "bestTest = 1.558970737\n",
      "bestIteration = 287\n",
      "\n",
      "Shrink model to first 288 iterations.\n",
      "err:  1.5589707214403234\n",
      "0:\tlearn: 1.9995433\ttest: 1.9995614\ttest1: 3.8813028\tbest: 3.8813028 (0)\ttotal: 9.42ms\tremaining: 7m 51s\n",
      "100:\tlearn: 1.7663267\ttest: 1.7668823\ttest1: 3.6835163\tbest: 3.6835163 (100)\ttotal: 712ms\tremaining: 5m 51s\n",
      "200:\tlearn: 1.6634577\ttest: 1.6671937\ttest1: 3.5908371\tbest: 3.5907551 (199)\ttotal: 1.31s\tremaining: 5m 24s\n",
      "300:\tlearn: 1.5973557\ttest: 1.6100606\ttest1: 3.5272524\tbest: 3.5272524 (300)\ttotal: 1.86s\tremaining: 5m 7s\n",
      "400:\tlearn: 1.5523993\ttest: 1.5723066\ttest1: 3.4866698\tbest: 3.4866698 (400)\ttotal: 2.42s\tremaining: 4m 59s\n",
      "500:\tlearn: 1.5220914\ttest: 1.5479269\ttest1: 3.4531663\tbest: 3.4531663 (500)\ttotal: 2.97s\tremaining: 4m 53s\n",
      "600:\tlearn: 1.4878914\ttest: 1.5218267\ttest1: 3.4252000\tbest: 3.4252000 (600)\ttotal: 3.5s\tremaining: 4m 47s\n",
      "700:\tlearn: 1.4559867\ttest: 1.4967387\ttest1: 3.3882276\tbest: 3.3881715 (699)\ttotal: 4.06s\tremaining: 4m 45s\n",
      "800:\tlearn: 1.4289628\ttest: 1.4756943\ttest1: 3.3646812\tbest: 3.3646812 (800)\ttotal: 4.59s\tremaining: 4m 42s\n",
      "900:\tlearn: 1.3995621\ttest: 1.4517581\ttest1: 3.3467634\tbest: 3.3467634 (900)\ttotal: 5.16s\tremaining: 4m 41s\n",
      "1000:\tlearn: 1.3720693\ttest: 1.4292704\ttest1: 3.3316573\tbest: 3.3314333 (990)\ttotal: 5.7s\tremaining: 4m 39s\n",
      "1100:\tlearn: 1.3457640\ttest: 1.4090935\ttest1: 3.3141865\tbest: 3.3140918 (1096)\ttotal: 6.26s\tremaining: 4m 38s\n",
      "1200:\tlearn: 1.3207519\ttest: 1.3888748\ttest1: 3.2987728\tbest: 3.2985620 (1199)\ttotal: 6.83s\tremaining: 4m 37s\n",
      "1300:\tlearn: 1.2914707\ttest: 1.3650249\ttest1: 3.2794021\tbest: 3.2793270 (1299)\ttotal: 7.41s\tremaining: 4m 37s\n",
      "1400:\tlearn: 1.2682619\ttest: 1.3458122\ttest1: 3.2719502\tbest: 3.2718889 (1398)\ttotal: 7.98s\tremaining: 4m 36s\n",
      "1500:\tlearn: 1.2480017\ttest: 1.3304774\ttest1: 3.2611252\tbest: 3.2609752 (1493)\ttotal: 8.55s\tremaining: 4m 36s\n",
      "1600:\tlearn: 1.2286676\ttest: 1.3157757\ttest1: 3.2476184\tbest: 3.2476184 (1600)\ttotal: 9.13s\tremaining: 4m 36s\n",
      "1700:\tlearn: 1.2112357\ttest: 1.3030326\ttest1: 3.2312059\tbest: 3.2312059 (1700)\ttotal: 9.69s\tremaining: 4m 35s\n",
      "1800:\tlearn: 1.1929567\ttest: 1.2891854\ttest1: 3.2206923\tbest: 3.2206923 (1800)\ttotal: 10.3s\tremaining: 4m 34s\n",
      "1900:\tlearn: 1.1770708\ttest: 1.2770793\ttest1: 3.2118415\tbest: 3.2117480 (1893)\ttotal: 10.8s\tremaining: 4m 34s\n",
      "2000:\tlearn: 1.1609164\ttest: 1.2649352\ttest1: 3.1973880\tbest: 3.1973880 (2000)\ttotal: 11.5s\tremaining: 4m 35s\n",
      "2100:\tlearn: 1.1485615\ttest: 1.2560457\ttest1: 3.1883311\tbest: 3.1883311 (2100)\ttotal: 12s\tremaining: 4m 33s\n",
      "2200:\tlearn: 1.1351539\ttest: 1.2461584\ttest1: 3.1776466\tbest: 3.1776466 (2200)\ttotal: 12.5s\tremaining: 4m 32s\n",
      "2300:\tlearn: 1.1235439\ttest: 1.2386305\ttest1: 3.1700056\tbest: 3.1699930 (2299)\ttotal: 13.1s\tremaining: 4m 31s\n",
      "2400:\tlearn: 1.1113419\ttest: 1.2297508\ttest1: 3.1640814\tbest: 3.1640814 (2400)\ttotal: 13.7s\tremaining: 4m 31s\n",
      "2500:\tlearn: 1.0997040\ttest: 1.2222628\ttest1: 3.1581753\tbest: 3.1578667 (2493)\ttotal: 14.3s\tremaining: 4m 31s\n",
      "2600:\tlearn: 1.0890819\ttest: 1.2143882\ttest1: 3.1542330\tbest: 3.1542330 (2600)\ttotal: 14.8s\tremaining: 4m 30s\n",
      "2700:\tlearn: 1.0788939\ttest: 1.2081558\ttest1: 3.1477760\tbest: 3.1477760 (2700)\ttotal: 15.4s\tremaining: 4m 30s\n",
      "2800:\tlearn: 1.0685558\ttest: 1.2015369\ttest1: 3.1425216\tbest: 3.1425216 (2800)\ttotal: 16s\tremaining: 4m 29s\n",
      "2900:\tlearn: 1.0581668\ttest: 1.1948725\ttest1: 3.1369625\tbest: 3.1366786 (2886)\ttotal: 16.6s\tremaining: 4m 28s\n",
      "3000:\tlearn: 1.0500476\ttest: 1.1895348\ttest1: 3.1328956\tbest: 3.1328568 (2998)\ttotal: 17.2s\tremaining: 4m 28s\n",
      "3100:\tlearn: 1.0404535\ttest: 1.1836371\ttest1: 3.1288213\tbest: 3.1288213 (3100)\ttotal: 17.8s\tremaining: 4m 28s\n",
      "3200:\tlearn: 1.0321943\ttest: 1.1781046\ttest1: 3.1252096\tbest: 3.1251463 (3188)\ttotal: 18.3s\tremaining: 4m 27s\n",
      "3300:\tlearn: 1.0223804\ttest: 1.1724633\ttest1: 3.1223535\tbest: 3.1223535 (3300)\ttotal: 18.9s\tremaining: 4m 27s\n",
      "3400:\tlearn: 1.0131813\ttest: 1.1668380\ttest1: 3.1194344\tbest: 3.1193609 (3398)\ttotal: 19.5s\tremaining: 4m 26s\n",
      "3500:\tlearn: 1.0030506\ttest: 1.1602207\ttest1: 3.1148157\tbest: 3.1148157 (3500)\ttotal: 20.1s\tremaining: 4m 26s\n",
      "3600:\tlearn: 0.9946300\ttest: 1.1548083\ttest1: 3.1130159\tbest: 3.1127153 (3584)\ttotal: 20.6s\tremaining: 4m 26s\n",
      "3700:\tlearn: 0.9859474\ttest: 1.1500574\ttest1: 3.1102815\tbest: 3.1102550 (3697)\ttotal: 21.3s\tremaining: 4m 26s\n",
      "3800:\tlearn: 0.9783519\ttest: 1.1453068\ttest1: 3.1075877\tbest: 3.1075727 (3797)\ttotal: 21.9s\tremaining: 4m 26s\n",
      "3900:\tlearn: 0.9703394\ttest: 1.1411937\ttest1: 3.1071589\tbest: 3.1068780 (3856)\ttotal: 22.5s\tremaining: 4m 25s\n",
      "4000:\tlearn: 0.9634558\ttest: 1.1375487\ttest1: 3.1049770\tbest: 3.1049529 (3994)\ttotal: 23.1s\tremaining: 4m 25s\n",
      "4100:\tlearn: 0.9562686\ttest: 1.1335911\ttest1: 3.1029674\tbest: 3.1029612 (4099)\ttotal: 23.6s\tremaining: 4m 24s\n",
      "4200:\tlearn: 0.9482942\ttest: 1.1291690\ttest1: 3.1008438\tbest: 3.1005521 (4191)\ttotal: 24.3s\tremaining: 4m 25s\n",
      "4300:\tlearn: 0.9401142\ttest: 1.1246121\ttest1: 3.0998533\tbest: 3.0997248 (4295)\ttotal: 24.9s\tremaining: 4m 24s\n",
      "4400:\tlearn: 0.9326301\ttest: 1.1200288\ttest1: 3.0985004\tbest: 3.0984631 (4399)\ttotal: 25.5s\tremaining: 4m 24s\n",
      "4500:\tlearn: 0.9245675\ttest: 1.1150493\ttest1: 3.0963146\tbest: 3.0962417 (4496)\ttotal: 26.1s\tremaining: 4m 23s\n",
      "4600:\tlearn: 0.9183486\ttest: 1.1123048\ttest1: 3.0955287\tbest: 3.0955287 (4600)\ttotal: 26.6s\tremaining: 4m 22s\n",
      "4700:\tlearn: 0.9107325\ttest: 1.1078526\ttest1: 3.0938627\tbest: 3.0937050 (4683)\ttotal: 27.2s\tremaining: 4m 22s\n",
      "4800:\tlearn: 0.9041405\ttest: 1.1041304\ttest1: 3.0923610\tbest: 3.0921735 (4788)\ttotal: 27.9s\tremaining: 4m 22s\n",
      "4900:\tlearn: 0.8978406\ttest: 1.1007382\ttest1: 3.0912844\tbest: 3.0911676 (4875)\ttotal: 28.5s\tremaining: 4m 21s\n",
      "5000:\tlearn: 0.8906673\ttest: 1.0964720\ttest1: 3.0890747\tbest: 3.0890210 (4997)\ttotal: 29s\tremaining: 4m 21s\n",
      "5100:\tlearn: 0.8838689\ttest: 1.0928844\ttest1: 3.0874072\tbest: 3.0874072 (5100)\ttotal: 29.6s\tremaining: 4m 20s\n",
      "5200:\tlearn: 0.8770784\ttest: 1.0890805\ttest1: 3.0863614\tbest: 3.0863607 (5199)\ttotal: 30.3s\tremaining: 4m 20s\n",
      "5300:\tlearn: 0.8704778\ttest: 1.0857967\ttest1: 3.0857491\tbest: 3.0857361 (5299)\ttotal: 30.8s\tremaining: 4m 20s\n",
      "5400:\tlearn: 0.8641881\ttest: 1.0825441\ttest1: 3.0849831\tbest: 3.0848790 (5385)\ttotal: 31.4s\tremaining: 4m 19s\n",
      "5500:\tlearn: 0.8582319\ttest: 1.0793696\ttest1: 3.0844702\tbest: 3.0841932 (5469)\ttotal: 32s\tremaining: 4m 19s\n",
      "5600:\tlearn: 0.8517959\ttest: 1.0760880\ttest1: 3.0825801\tbest: 3.0825702 (5599)\ttotal: 32.6s\tremaining: 4m 18s\n",
      "5700:\tlearn: 0.8464570\ttest: 1.0731662\ttest1: 3.0821996\tbest: 3.0820741 (5649)\ttotal: 33.2s\tremaining: 4m 18s\n",
      "5800:\tlearn: 0.8408092\ttest: 1.0704605\ttest1: 3.0806764\tbest: 3.0805276 (5787)\ttotal: 33.8s\tremaining: 4m 17s\n",
      "5900:\tlearn: 0.8355554\ttest: 1.0679685\ttest1: 3.0798834\tbest: 3.0797445 (5896)\ttotal: 34.4s\tremaining: 4m 17s\n",
      "6000:\tlearn: 0.8292174\ttest: 1.0644300\ttest1: 3.0784484\tbest: 3.0784484 (6000)\ttotal: 35s\tremaining: 4m 16s\n",
      "6100:\tlearn: 0.8235237\ttest: 1.0626974\ttest1: 3.0785170\tbest: 3.0779574 (6043)\ttotal: 35.5s\tremaining: 4m 15s\n",
      "6200:\tlearn: 0.8176429\ttest: 1.0598847\ttest1: 3.0778973\tbest: 3.0776707 (6184)\ttotal: 36.1s\tremaining: 4m 15s\n",
      "6300:\tlearn: 0.8115765\ttest: 1.0568626\ttest1: 3.0776311\tbest: 3.0774818 (6287)\ttotal: 36.7s\tremaining: 4m 14s\n",
      "6400:\tlearn: 0.8055018\ttest: 1.0531963\ttest1: 3.0769034\tbest: 3.0768420 (6381)\ttotal: 37.3s\tremaining: 4m 13s\n",
      "6500:\tlearn: 0.8001707\ttest: 1.0512356\ttest1: 3.0757893\tbest: 3.0757689 (6499)\ttotal: 37.9s\tremaining: 4m 13s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6600:\tlearn: 0.7948923\ttest: 1.0490529\ttest1: 3.0751749\tbest: 3.0751380 (6594)\ttotal: 38.4s\tremaining: 4m 12s\n",
      "6700:\tlearn: 0.7894185\ttest: 1.0466666\ttest1: 3.0752941\tbest: 3.0751380 (6594)\ttotal: 39.1s\tremaining: 4m 12s\n",
      "6800:\tlearn: 0.7841344\ttest: 1.0447143\ttest1: 3.0737688\tbest: 3.0736566 (6793)\ttotal: 39.7s\tremaining: 4m 12s\n",
      "6900:\tlearn: 0.7790876\ttest: 1.0421642\ttest1: 3.0731834\tbest: 3.0730329 (6885)\ttotal: 40.3s\tremaining: 4m 11s\n",
      "7000:\tlearn: 0.7735424\ttest: 1.0395673\ttest1: 3.0731281\tbest: 3.0729201 (6970)\ttotal: 40.8s\tremaining: 4m 10s\n",
      "7100:\tlearn: 0.7682493\ttest: 1.0370718\ttest1: 3.0726132\tbest: 3.0726099 (7098)\ttotal: 41.4s\tremaining: 4m 10s\n",
      "7200:\tlearn: 0.7634373\ttest: 1.0347423\ttest1: 3.0725876\tbest: 3.0725143 (7194)\ttotal: 42s\tremaining: 4m 9s\n",
      "7300:\tlearn: 0.7581647\ttest: 1.0315965\ttest1: 3.0725663\tbest: 3.0723812 (7241)\ttotal: 42.6s\tremaining: 4m 9s\n",
      "7400:\tlearn: 0.7531578\ttest: 1.0291568\ttest1: 3.0727691\tbest: 3.0723812 (7241)\ttotal: 43.2s\tremaining: 4m 8s\n",
      "7500:\tlearn: 0.7488618\ttest: 1.0268569\ttest1: 3.0728090\tbest: 3.0723812 (7241)\ttotal: 43.8s\tremaining: 4m 8s\n",
      "7600:\tlearn: 0.7443900\ttest: 1.0246770\ttest1: 3.0724941\tbest: 3.0723812 (7241)\ttotal: 44.4s\tremaining: 4m 7s\n",
      "7700:\tlearn: 0.7397283\ttest: 1.0227250\ttest1: 3.0721277\tbest: 3.0719659 (7657)\ttotal: 45s\tremaining: 4m 7s\n",
      "7800:\tlearn: 0.7349879\ttest: 1.0206600\ttest1: 3.0717735\tbest: 3.0717646 (7797)\ttotal: 45.6s\tremaining: 4m 6s\n",
      "7900:\tlearn: 0.7300790\ttest: 1.0184153\ttest1: 3.0717425\tbest: 3.0714041 (7859)\ttotal: 46.2s\tremaining: 4m 6s\n",
      "8000:\tlearn: 0.7252457\ttest: 1.0163346\ttest1: 3.0719041\tbest: 3.0714041 (7859)\ttotal: 46.8s\tremaining: 4m 5s\n",
      "8100:\tlearn: 0.7209221\ttest: 1.0144598\ttest1: 3.0716269\tbest: 3.0713516 (8040)\ttotal: 47.4s\tremaining: 4m 5s\n",
      "8200:\tlearn: 0.7165564\ttest: 1.0127246\ttest1: 3.0713257\tbest: 3.0713257 (8200)\ttotal: 48s\tremaining: 4m 4s\n",
      "8300:\tlearn: 0.7122624\ttest: 1.0108423\ttest1: 3.0710883\tbest: 3.0710581 (8296)\ttotal: 48.5s\tremaining: 4m 3s\n",
      "8400:\tlearn: 0.7078631\ttest: 1.0087848\ttest1: 3.0704784\tbest: 3.0704601 (8398)\ttotal: 49.1s\tremaining: 4m 3s\n",
      "8500:\tlearn: 0.7035510\ttest: 1.0069452\ttest1: 3.0702009\tbest: 3.0702009 (8500)\ttotal: 49.7s\tremaining: 4m 2s\n",
      "8600:\tlearn: 0.6988661\ttest: 1.0046248\ttest1: 3.0701079\tbest: 3.0700902 (8598)\ttotal: 50.2s\tremaining: 4m 1s\n",
      "8700:\tlearn: 0.6943587\ttest: 1.0024892\ttest1: 3.0700208\tbest: 3.0700208 (8700)\ttotal: 50.8s\tremaining: 4m 1s\n",
      "8800:\tlearn: 0.6900423\ttest: 1.0004764\ttest1: 3.0693601\tbest: 3.0693296 (8788)\ttotal: 51.4s\tremaining: 4m\n",
      "8900:\tlearn: 0.6858379\ttest: 0.9986328\ttest1: 3.0694383\tbest: 3.0692806 (8811)\ttotal: 52s\tremaining: 3m 59s\n",
      "9000:\tlearn: 0.6815129\ttest: 0.9963233\ttest1: 3.0696950\tbest: 3.0692294 (8926)\ttotal: 52.5s\tremaining: 3m 59s\n",
      "9100:\tlearn: 0.6774980\ttest: 0.9944150\ttest1: 3.0697273\tbest: 3.0692294 (8926)\ttotal: 53.1s\tremaining: 3m 58s\n",
      "9200:\tlearn: 0.6738821\ttest: 0.9927153\ttest1: 3.0693460\tbest: 3.0692294 (8926)\ttotal: 53.7s\tremaining: 3m 58s\n",
      "9300:\tlearn: 0.6702780\ttest: 0.9910733\ttest1: 3.0691129\tbest: 3.0689636 (9288)\ttotal: 54.3s\tremaining: 3m 57s\n",
      "9400:\tlearn: 0.6662196\ttest: 0.9892654\ttest1: 3.0694417\tbest: 3.0689636 (9288)\ttotal: 54.9s\tremaining: 3m 56s\n",
      "9500:\tlearn: 0.6624686\ttest: 0.9876515\ttest1: 3.0686596\tbest: 3.0686451 (9498)\ttotal: 55.4s\tremaining: 3m 56s\n",
      "9600:\tlearn: 0.6589115\ttest: 0.9863392\ttest1: 3.0687396\tbest: 3.0684976 (9558)\ttotal: 56s\tremaining: 3m 55s\n",
      "9700:\tlearn: 0.6550968\ttest: 0.9846637\ttest1: 3.0682415\tbest: 3.0682144 (9696)\ttotal: 56.6s\tremaining: 3m 54s\n",
      "9800:\tlearn: 0.6511361\ttest: 0.9834257\ttest1: 3.0674356\tbest: 3.0674034 (9793)\ttotal: 57.1s\tremaining: 3m 54s\n",
      "9900:\tlearn: 0.6474307\ttest: 0.9818671\ttest1: 3.0672595\tbest: 3.0670902 (9850)\ttotal: 57.7s\tremaining: 3m 53s\n",
      "10000:\tlearn: 0.6435079\ttest: 0.9801260\ttest1: 3.0672074\tbest: 3.0670902 (9850)\ttotal: 58.3s\tremaining: 3m 53s\n",
      "10100:\tlearn: 0.6396484\ttest: 0.9783837\ttest1: 3.0671870\tbest: 3.0668727 (10057)\ttotal: 58.9s\tremaining: 3m 52s\n",
      "10200:\tlearn: 0.6361996\ttest: 0.9772261\ttest1: 3.0666414\tbest: 3.0666414 (10200)\ttotal: 59.5s\tremaining: 3m 52s\n",
      "10300:\tlearn: 0.6321238\ttest: 0.9752138\ttest1: 3.0660598\tbest: 3.0660503 (10298)\ttotal: 1m\tremaining: 3m 51s\n",
      "10400:\tlearn: 0.6281639\ttest: 0.9737830\ttest1: 3.0659690\tbest: 3.0658436 (10389)\ttotal: 1m\tremaining: 3m 51s\n",
      "10500:\tlearn: 0.6246836\ttest: 0.9724349\ttest1: 3.0658748\tbest: 3.0658013 (10477)\ttotal: 1m 1s\tremaining: 3m 50s\n",
      "10600:\tlearn: 0.6213769\ttest: 0.9709477\ttest1: 3.0655285\tbest: 3.0654741 (10595)\ttotal: 1m 1s\tremaining: 3m 49s\n",
      "10700:\tlearn: 0.6177363\ttest: 0.9693622\ttest1: 3.0655866\tbest: 3.0652753 (10684)\ttotal: 1m 2s\tremaining: 3m 49s\n",
      "10800:\tlearn: 0.6143479\ttest: 0.9679521\ttest1: 3.0655648\tbest: 3.0652753 (10684)\ttotal: 1m 3s\tremaining: 3m 48s\n",
      "10900:\tlearn: 0.6106477\ttest: 0.9664129\ttest1: 3.0652327\tbest: 3.0650710 (10865)\ttotal: 1m 3s\tremaining: 3m 48s\n",
      "11000:\tlearn: 0.6073824\ttest: 0.9648606\ttest1: 3.0649328\tbest: 3.0648684 (10987)\ttotal: 1m 4s\tremaining: 3m 47s\n",
      "11100:\tlearn: 0.6037572\ttest: 0.9631026\ttest1: 3.0646809\tbest: 3.0646751 (11022)\ttotal: 1m 4s\tremaining: 3m 47s\n",
      "11200:\tlearn: 0.6003212\ttest: 0.9617342\ttest1: 3.0649412\tbest: 3.0646739 (11111)\ttotal: 1m 5s\tremaining: 3m 46s\n",
      "11300:\tlearn: 0.5968515\ttest: 0.9600014\ttest1: 3.0649970\tbest: 3.0646739 (11111)\ttotal: 1m 6s\tremaining: 3m 46s\n",
      "11400:\tlearn: 0.5933009\ttest: 0.9583908\ttest1: 3.0650681\tbest: 3.0646739 (11111)\ttotal: 1m 6s\tremaining: 3m 45s\n",
      "11500:\tlearn: 0.5898078\ttest: 0.9571201\ttest1: 3.0651186\tbest: 3.0646739 (11111)\ttotal: 1m 7s\tremaining: 3m 44s\n",
      "11600:\tlearn: 0.5867798\ttest: 0.9556310\ttest1: 3.0648983\tbest: 3.0646159 (11568)\ttotal: 1m 7s\tremaining: 3m 44s\n",
      "11700:\tlearn: 0.5834774\ttest: 0.9542463\ttest1: 3.0649010\tbest: 3.0646159 (11568)\ttotal: 1m 8s\tremaining: 3m 43s\n",
      "11800:\tlearn: 0.5799293\ttest: 0.9526289\ttest1: 3.0646228\tbest: 3.0644224 (11748)\ttotal: 1m 8s\tremaining: 3m 43s\n",
      "11900:\tlearn: 0.5768592\ttest: 0.9514362\ttest1: 3.0647220\tbest: 3.0644224 (11748)\ttotal: 1m 9s\tremaining: 3m 42s\n",
      "12000:\tlearn: 0.5738646\ttest: 0.9505064\ttest1: 3.0643985\tbest: 3.0643946 (11999)\ttotal: 1m 10s\tremaining: 3m 42s\n",
      "12100:\tlearn: 0.5706762\ttest: 0.9487116\ttest1: 3.0643800\tbest: 3.0640847 (12059)\ttotal: 1m 10s\tremaining: 3m 41s\n",
      "12200:\tlearn: 0.5676236\ttest: 0.9473253\ttest1: 3.0639397\tbest: 3.0639265 (12192)\ttotal: 1m 11s\tremaining: 3m 40s\n",
      "12300:\tlearn: 0.5646775\ttest: 0.9461639\ttest1: 3.0639063\tbest: 3.0637535 (12295)\ttotal: 1m 11s\tremaining: 3m 40s\n",
      "12400:\tlearn: 0.5619325\ttest: 0.9448513\ttest1: 3.0637571\tbest: 3.0637216 (12397)\ttotal: 1m 12s\tremaining: 3m 39s\n",
      "12500:\tlearn: 0.5590294\ttest: 0.9435576\ttest1: 3.0634193\tbest: 3.0634113 (12498)\ttotal: 1m 13s\tremaining: 3m 39s\n",
      "12600:\tlearn: 0.5559956\ttest: 0.9422430\ttest1: 3.0635307\tbest: 3.0632972 (12513)\ttotal: 1m 13s\tremaining: 3m 38s\n",
      "12700:\tlearn: 0.5535714\ttest: 0.9411431\ttest1: 3.0632210\tbest: 3.0631760 (12696)\ttotal: 1m 14s\tremaining: 3m 38s\n",
      "12800:\tlearn: 0.5508008\ttest: 0.9397610\ttest1: 3.0633187\tbest: 3.0631155 (12758)\ttotal: 1m 14s\tremaining: 3m 37s\n",
      "12900:\tlearn: 0.5480564\ttest: 0.9387096\ttest1: 3.0631359\tbest: 3.0630110 (12847)\ttotal: 1m 15s\tremaining: 3m 37s\n",
      "13000:\tlearn: 0.5451816\ttest: 0.9374144\ttest1: 3.0632227\tbest: 3.0630110 (12847)\ttotal: 1m 16s\tremaining: 3m 36s\n",
      "13100:\tlearn: 0.5424174\ttest: 0.9363487\ttest1: 3.0628650\tbest: 3.0627836 (13091)\ttotal: 1m 16s\tremaining: 3m 35s\n",
      "13200:\tlearn: 0.5392383\ttest: 0.9347114\ttest1: 3.0630075\tbest: 3.0627836 (13091)\ttotal: 1m 17s\tremaining: 3m 35s\n",
      "13300:\tlearn: 0.5365118\ttest: 0.9335333\ttest1: 3.0631042\tbest: 3.0627836 (13091)\ttotal: 1m 17s\tremaining: 3m 34s\n",
      "13400:\tlearn: 0.5337199\ttest: 0.9321915\ttest1: 3.0631415\tbest: 3.0627836 (13091)\ttotal: 1m 18s\tremaining: 3m 34s\n",
      "13500:\tlearn: 0.5311875\ttest: 0.9310086\ttest1: 3.0628613\tbest: 3.0627836 (13091)\ttotal: 1m 19s\tremaining: 3m 33s\n",
      "13600:\tlearn: 0.5285175\ttest: 0.9299636\ttest1: 3.0626678\tbest: 3.0626393 (13597)\ttotal: 1m 19s\tremaining: 3m 33s\n",
      "13700:\tlearn: 0.5259022\ttest: 0.9288215\ttest1: 3.0621858\tbest: 3.0621754 (13699)\ttotal: 1m 20s\tremaining: 3m 32s\n",
      "13800:\tlearn: 0.5234507\ttest: 0.9277772\ttest1: 3.0625165\tbest: 3.0621754 (13699)\ttotal: 1m 20s\tremaining: 3m 32s\n",
      "13900:\tlearn: 0.5205335\ttest: 0.9263507\ttest1: 3.0624973\tbest: 3.0621754 (13699)\ttotal: 1m 21s\tremaining: 3m 31s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "14000:\tlearn: 0.5176603\ttest: 0.9251854\ttest1: 3.0619181\tbest: 3.0619181 (14000)\ttotal: 1m 22s\tremaining: 3m 31s\n",
      "14100:\tlearn: 0.5147129\ttest: 0.9237599\ttest1: 3.0617182\tbest: 3.0616881 (14096)\ttotal: 1m 22s\tremaining: 3m 30s\n",
      "14200:\tlearn: 0.5122033\ttest: 0.9228884\ttest1: 3.0621070\tbest: 3.0616881 (14096)\ttotal: 1m 23s\tremaining: 3m 29s\n",
      "14300:\tlearn: 0.5094437\ttest: 0.9216764\ttest1: 3.0619107\tbest: 3.0616881 (14096)\ttotal: 1m 23s\tremaining: 3m 29s\n",
      "14400:\tlearn: 0.5069285\ttest: 0.9210047\ttest1: 3.0620130\tbest: 3.0616881 (14096)\ttotal: 1m 24s\tremaining: 3m 28s\n",
      "14500:\tlearn: 0.5044702\ttest: 0.9199964\ttest1: 3.0618261\tbest: 3.0616881 (14096)\ttotal: 1m 25s\tremaining: 3m 28s\n",
      "14600:\tlearn: 0.5021485\ttest: 0.9189929\ttest1: 3.0616233\tbest: 3.0616199 (14577)\ttotal: 1m 25s\tremaining: 3m 27s\n",
      "14700:\tlearn: 0.4996582\ttest: 0.9179949\ttest1: 3.0614991\tbest: 3.0614723 (14694)\ttotal: 1m 26s\tremaining: 3m 27s\n",
      "14800:\tlearn: 0.4971790\ttest: 0.9169607\ttest1: 3.0615411\tbest: 3.0614056 (14725)\ttotal: 1m 26s\tremaining: 3m 26s\n",
      "14900:\tlearn: 0.4946972\ttest: 0.9157663\ttest1: 3.0617006\tbest: 3.0614056 (14725)\ttotal: 1m 27s\tremaining: 3m 26s\n",
      "15000:\tlearn: 0.4920397\ttest: 0.9148195\ttest1: 3.0615244\tbest: 3.0614056 (14725)\ttotal: 1m 28s\tremaining: 3m 26s\n",
      "15100:\tlearn: 0.4900283\ttest: 0.9141789\ttest1: 3.0613239\tbest: 3.0613198 (15094)\ttotal: 1m 29s\tremaining: 3m 26s\n",
      "15200:\tlearn: 0.4875074\ttest: 0.9131178\ttest1: 3.0612839\tbest: 3.0612758 (15199)\ttotal: 1m 30s\tremaining: 3m 26s\n",
      "15300:\tlearn: 0.4848543\ttest: 0.9117414\ttest1: 3.0611756\tbest: 3.0609936 (15238)\ttotal: 1m 30s\tremaining: 3m 26s\n",
      "15400:\tlearn: 0.4823594\ttest: 0.9109306\ttest1: 3.0612812\tbest: 3.0609936 (15238)\ttotal: 1m 31s\tremaining: 3m 25s\n",
      "15500:\tlearn: 0.4798767\ttest: 0.9098470\ttest1: 3.0611459\tbest: 3.0609936 (15238)\ttotal: 1m 32s\tremaining: 3m 25s\n",
      "15600:\tlearn: 0.4773605\ttest: 0.9087676\ttest1: 3.0612428\tbest: 3.0609936 (15238)\ttotal: 1m 32s\tremaining: 3m 24s\n",
      "15700:\tlearn: 0.4751199\ttest: 0.9078820\ttest1: 3.0611058\tbest: 3.0609936 (15238)\ttotal: 1m 33s\tremaining: 3m 23s\n",
      "Stopped by overfitting detector  (500 iterations wait)\n",
      "\n",
      "bestTest = 3.060993626\n",
      "bestIteration = 15238\n",
      "\n",
      "Shrink model to first 15239 iterations.\n",
      "err:  3.0609935162966417\n",
      "0:\tlearn: 2.5889063\ttest: 2.5910157\ttest1: 2.0566734\tbest: 2.0566734 (0)\ttotal: 11.4ms\tremaining: 9m 28s\n",
      "100:\tlearn: 2.2567680\ttest: 2.2560179\ttest1: 1.9096770\tbest: 1.9096770 (100)\ttotal: 631ms\tremaining: 5m 11s\n",
      "200:\tlearn: 2.0546945\ttest: 2.0948607\ttest1: 1.8175634\tbest: 1.8175634 (200)\ttotal: 1.25s\tremaining: 5m 10s\n",
      "300:\tlearn: 1.9007321\ttest: 1.9686273\ttest1: 1.7351156\tbest: 1.7351156 (300)\ttotal: 1.84s\tremaining: 5m 4s\n",
      "400:\tlearn: 1.7817347\ttest: 1.8747875\ttest1: 1.6745979\tbest: 1.6745979 (400)\ttotal: 2.43s\tremaining: 5m\n",
      "500:\tlearn: 1.7058063\ttest: 1.8112601\ttest1: 1.6348813\tbest: 1.6348680 (499)\ttotal: 2.99s\tremaining: 4m 55s\n",
      "600:\tlearn: 1.6462053\ttest: 1.7626909\ttest1: 1.5999036\tbest: 1.5999036 (600)\ttotal: 3.6s\tremaining: 4m 55s\n",
      "700:\tlearn: 1.5952165\ttest: 1.7207140\ttest1: 1.5725670\tbest: 1.5725537 (699)\ttotal: 4.16s\tremaining: 4m 52s\n",
      "800:\tlearn: 1.5480269\ttest: 1.6836945\ttest1: 1.5553644\tbest: 1.5553644 (800)\ttotal: 4.76s\tremaining: 4m 52s\n",
      "900:\tlearn: 1.5110040\ttest: 1.6551337\ttest1: 1.5421062\tbest: 1.5420971 (899)\ttotal: 5.35s\tremaining: 4m 51s\n",
      "1000:\tlearn: 1.4779236\ttest: 1.6298543\ttest1: 1.5291675\tbest: 1.5291675 (1000)\ttotal: 5.91s\tremaining: 4m 49s\n",
      "1100:\tlearn: 1.4458893\ttest: 1.6046635\ttest1: 1.5200274\tbest: 1.5200274 (1100)\ttotal: 6.47s\tremaining: 4m 47s\n",
      "1200:\tlearn: 1.4104431\ttest: 1.5737449\ttest1: 1.5027687\tbest: 1.5027687 (1200)\ttotal: 7.02s\tremaining: 4m 45s\n",
      "1300:\tlearn: 1.3807482\ttest: 1.5502904\ttest1: 1.4883361\tbest: 1.4883361 (1300)\ttotal: 7.6s\tremaining: 4m 44s\n",
      "1400:\tlearn: 1.3582893\ttest: 1.5330206\ttest1: 1.4787967\tbest: 1.4787967 (1400)\ttotal: 8.18s\tremaining: 4m 43s\n",
      "1500:\tlearn: 1.3382958\ttest: 1.5189160\ttest1: 1.4699830\tbest: 1.4699673 (1499)\ttotal: 8.74s\tremaining: 4m 42s\n",
      "1600:\tlearn: 1.3186807\ttest: 1.5041751\ttest1: 1.4588429\tbest: 1.4587999 (1598)\ttotal: 9.32s\tremaining: 4m 41s\n",
      "1700:\tlearn: 1.3006531\ttest: 1.4916644\ttest1: 1.4509878\tbest: 1.4509878 (1700)\ttotal: 9.91s\tremaining: 4m 41s\n",
      "1800:\tlearn: 1.2829329\ttest: 1.4807744\ttest1: 1.4443571\tbest: 1.4443571 (1800)\ttotal: 10.5s\tremaining: 4m 40s\n",
      "1900:\tlearn: 1.2660534\ttest: 1.4695093\ttest1: 1.4389123\tbest: 1.4389123 (1900)\ttotal: 11.1s\tremaining: 4m 40s\n",
      "2000:\tlearn: 1.2501312\ttest: 1.4603045\ttest1: 1.4337599\tbest: 1.4337599 (2000)\ttotal: 11.7s\tremaining: 4m 40s\n",
      "2100:\tlearn: 1.2353874\ttest: 1.4520609\ttest1: 1.4302058\tbest: 1.4302058 (2100)\ttotal: 12.3s\tremaining: 4m 41s\n",
      "2200:\tlearn: 1.2199444\ttest: 1.4431460\ttest1: 1.4280857\tbest: 1.4280857 (2200)\ttotal: 12.9s\tremaining: 4m 41s\n",
      "2300:\tlearn: 1.2051687\ttest: 1.4329178\ttest1: 1.4234110\tbest: 1.4233516 (2299)\ttotal: 13.6s\tremaining: 4m 41s\n",
      "2400:\tlearn: 1.1903299\ttest: 1.4229498\ttest1: 1.4203664\tbest: 1.4203664 (2400)\ttotal: 14.2s\tremaining: 4m 40s\n",
      "2500:\tlearn: 1.1767703\ttest: 1.4143584\ttest1: 1.4172457\tbest: 1.4171887 (2499)\ttotal: 14.7s\tremaining: 4m 40s\n",
      "2600:\tlearn: 1.1654555\ttest: 1.4087372\ttest1: 1.4153233\tbest: 1.4152405 (2592)\ttotal: 15.3s\tremaining: 4m 39s\n",
      "2700:\tlearn: 1.1536786\ttest: 1.4019212\ttest1: 1.4130584\tbest: 1.4130584 (2700)\ttotal: 15.9s\tremaining: 4m 39s\n",
      "2800:\tlearn: 1.1413051\ttest: 1.3940385\ttest1: 1.4103378\tbest: 1.4103181 (2798)\ttotal: 16.5s\tremaining: 4m 38s\n",
      "2900:\tlearn: 1.1306921\ttest: 1.3884632\ttest1: 1.4088509\tbest: 1.4087387 (2893)\ttotal: 17.1s\tremaining: 4m 37s\n",
      "3000:\tlearn: 1.1200364\ttest: 1.3822718\ttest1: 1.4079391\tbest: 1.4078619 (2994)\ttotal: 17.7s\tremaining: 4m 36s\n",
      "3100:\tlearn: 1.1102766\ttest: 1.3761269\ttest1: 1.4063823\tbest: 1.4063069 (3087)\ttotal: 18.3s\tremaining: 4m 36s\n",
      "3200:\tlearn: 1.0993975\ttest: 1.3711774\ttest1: 1.4050523\tbest: 1.4050326 (3199)\ttotal: 18.9s\tremaining: 4m 35s\n",
      "3300:\tlearn: 1.0890270\ttest: 1.3659456\ttest1: 1.4036119\tbest: 1.4036119 (3300)\ttotal: 19.4s\tremaining: 4m 35s\n",
      "3400:\tlearn: 1.0798046\ttest: 1.3613330\ttest1: 1.4029876\tbest: 1.4029098 (3395)\ttotal: 20s\tremaining: 4m 34s\n",
      "3500:\tlearn: 1.0702052\ttest: 1.3560388\ttest1: 1.4017044\tbest: 1.4017044 (3500)\ttotal: 20.6s\tremaining: 4m 34s\n",
      "3600:\tlearn: 1.0602252\ttest: 1.3502252\ttest1: 1.3997983\tbest: 1.3997445 (3597)\ttotal: 21.6s\tremaining: 4m 37s\n",
      "3700:\tlearn: 1.0505978\ttest: 1.3440761\ttest1: 1.3989591\tbest: 1.3988780 (3699)\ttotal: 22.4s\tremaining: 4m 39s\n",
      "3800:\tlearn: 1.0419364\ttest: 1.3388443\ttest1: 1.3987951\tbest: 1.3984887 (3750)\ttotal: 23.2s\tremaining: 4m 42s\n",
      "3900:\tlearn: 1.0331883\ttest: 1.3344920\ttest1: 1.3984192\tbest: 1.3980766 (3841)\ttotal: 24s\tremaining: 4m 43s\n",
      "4000:\tlearn: 1.0250731\ttest: 1.3306844\ttest1: 1.3971212\tbest: 1.3971163 (3999)\ttotal: 24.6s\tremaining: 4m 43s\n",
      "4100:\tlearn: 1.0175138\ttest: 1.3269801\ttest1: 1.3959387\tbest: 1.3959387 (4100)\ttotal: 25.6s\tremaining: 4m 46s\n",
      "4200:\tlearn: 1.0090823\ttest: 1.3233386\ttest1: 1.3955161\tbest: 1.3953290 (4175)\ttotal: 26.3s\tremaining: 4m 46s\n",
      "4300:\tlearn: 1.0013006\ttest: 1.3187018\ttest1: 1.3953054\tbest: 1.3952654 (4249)\ttotal: 27s\tremaining: 4m 46s\n",
      "4400:\tlearn: 0.9931796\ttest: 1.3147779\ttest1: 1.3955614\tbest: 1.3950859 (4342)\ttotal: 27.6s\tremaining: 4m 45s\n",
      "4500:\tlearn: 0.9861417\ttest: 1.3108195\ttest1: 1.3948129\tbest: 1.3947870 (4491)\ttotal: 28.2s\tremaining: 4m 44s\n",
      "4600:\tlearn: 0.9782620\ttest: 1.3073793\ttest1: 1.3945378\tbest: 1.3945378 (4600)\ttotal: 28.8s\tremaining: 4m 44s\n",
      "4700:\tlearn: 0.9710377\ttest: 1.3032776\ttest1: 1.3939296\tbest: 1.3938887 (4682)\ttotal: 29.4s\tremaining: 4m 43s\n",
      "4800:\tlearn: 0.9642562\ttest: 1.3003913\ttest1: 1.3937284\tbest: 1.3935494 (4764)\ttotal: 30s\tremaining: 4m 42s\n",
      "4900:\tlearn: 0.9569864\ttest: 1.2981674\ttest1: 1.3944618\tbest: 1.3934848 (4814)\ttotal: 30.6s\tremaining: 4m 41s\n",
      "5000:\tlearn: 0.9506744\ttest: 1.2956380\ttest1: 1.3940957\tbest: 1.3934848 (4814)\ttotal: 31.2s\tremaining: 4m 40s\n",
      "5100:\tlearn: 0.9435316\ttest: 1.2918381\ttest1: 1.3939152\tbest: 1.3934848 (4814)\ttotal: 31.8s\tremaining: 4m 39s\n",
      "5200:\tlearn: 0.9369791\ttest: 1.2892502\ttest1: 1.3936425\tbest: 1.3934612 (5132)\ttotal: 32.3s\tremaining: 4m 38s\n",
      "5300:\tlearn: 0.9302254\ttest: 1.2856449\ttest1: 1.3934935\tbest: 1.3933265 (5297)\ttotal: 32.9s\tremaining: 4m 37s\n",
      "5400:\tlearn: 0.9230486\ttest: 1.2823317\ttest1: 1.3932201\tbest: 1.3931026 (5341)\ttotal: 33.5s\tremaining: 4m 36s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5500:\tlearn: 0.9159941\ttest: 1.2791610\ttest1: 1.3926993\tbest: 1.3926837 (5499)\ttotal: 34.1s\tremaining: 4m 35s\n",
      "5600:\tlearn: 0.9090034\ttest: 1.2760134\ttest1: 1.3928218\tbest: 1.3926270 (5575)\ttotal: 34.7s\tremaining: 4m 35s\n",
      "5700:\tlearn: 0.9024692\ttest: 1.2729396\ttest1: 1.3925591\tbest: 1.3924758 (5651)\ttotal: 35.3s\tremaining: 4m 34s\n",
      "5800:\tlearn: 0.8953690\ttest: 1.2695253\ttest1: 1.3922410\tbest: 1.3921469 (5789)\ttotal: 36s\tremaining: 4m 34s\n",
      "5900:\tlearn: 0.8896995\ttest: 1.2669481\ttest1: 1.3924417\tbest: 1.3921160 (5830)\ttotal: 36.7s\tremaining: 4m 34s\n",
      "6000:\tlearn: 0.8837672\ttest: 1.2647842\ttest1: 1.3928993\tbest: 1.3921160 (5830)\ttotal: 37.3s\tremaining: 4m 33s\n",
      "6100:\tlearn: 0.8774922\ttest: 1.2626282\ttest1: 1.3929730\tbest: 1.3921160 (5830)\ttotal: 37.9s\tremaining: 4m 33s\n",
      "6200:\tlearn: 0.8717369\ttest: 1.2600683\ttest1: 1.3930596\tbest: 1.3921160 (5830)\ttotal: 38.6s\tremaining: 4m 32s\n",
      "6300:\tlearn: 0.8664660\ttest: 1.2584315\ttest1: 1.3930457\tbest: 1.3921160 (5830)\ttotal: 39.2s\tremaining: 4m 31s\n",
      "Stopped by overfitting detector  (500 iterations wait)\n",
      "\n",
      "bestTest = 1.392115978\n",
      "bestIteration = 5830\n",
      "\n",
      "Shrink model to first 5831 iterations.\n",
      "err:  1.3921159707466004\n",
      "0:\tlearn: 2.5937313\ttest: 2.5949966\ttest1: 2.0340625\tbest: 2.0340625 (0)\ttotal: 14.4ms\tremaining: 11m 58s\n",
      "100:\tlearn: 2.2972582\ttest: 2.3485546\ttest1: 1.9107535\tbest: 1.9107535 (100)\ttotal: 587ms\tremaining: 4m 49s\n",
      "200:\tlearn: 2.0900844\ttest: 2.1698098\ttest1: 1.7903785\tbest: 1.7903785 (200)\ttotal: 1.16s\tremaining: 4m 48s\n",
      "300:\tlearn: 1.9192391\ttest: 2.0083588\ttest1: 1.7196239\tbest: 1.7196239 (300)\ttotal: 1.73s\tremaining: 4m 45s\n",
      "400:\tlearn: 1.7898161\ttest: 1.8929473\ttest1: 1.6540057\tbest: 1.6540057 (400)\ttotal: 2.32s\tremaining: 4m 47s\n",
      "500:\tlearn: 1.6909742\ttest: 1.8141603\ttest1: 1.6217316\tbest: 1.6213800 (497)\ttotal: 2.89s\tremaining: 4m 45s\n",
      "600:\tlearn: 1.6112082\ttest: 1.7434121\ttest1: 1.5861064\tbest: 1.5861064 (600)\ttotal: 3.45s\tremaining: 4m 43s\n",
      "700:\tlearn: 1.5490424\ttest: 1.6907925\ttest1: 1.5588438\tbest: 1.5588393 (699)\ttotal: 4s\tremaining: 4m 41s\n",
      "800:\tlearn: 1.4909357\ttest: 1.6405521\ttest1: 1.5449897\tbest: 1.5449897 (800)\ttotal: 4.57s\tremaining: 4m 40s\n",
      "900:\tlearn: 1.4462436\ttest: 1.5997937\ttest1: 1.5333433\tbest: 1.5331313 (899)\ttotal: 5.13s\tremaining: 4m 39s\n",
      "1000:\tlearn: 1.4006979\ttest: 1.5587665\ttest1: 1.5252633\tbest: 1.5252633 (1000)\ttotal: 5.69s\tremaining: 4m 38s\n",
      "1100:\tlearn: 1.3593554\ttest: 1.5209503\ttest1: 1.5153252\tbest: 1.5152978 (1099)\ttotal: 6.24s\tremaining: 4m 37s\n",
      "1200:\tlearn: 1.3315619\ttest: 1.4995476\ttest1: 1.5089989\tbest: 1.5089510 (1196)\ttotal: 6.77s\tremaining: 4m 35s\n",
      "1300:\tlearn: 1.3066166\ttest: 1.4804294\ttest1: 1.5053774\tbest: 1.5053113 (1299)\ttotal: 7.3s\tremaining: 4m 33s\n",
      "1400:\tlearn: 1.2817514\ttest: 1.4625129\ttest1: 1.5009201\tbest: 1.5008939 (1397)\ttotal: 7.84s\tremaining: 4m 32s\n",
      "1500:\tlearn: 1.2568201\ttest: 1.4424743\ttest1: 1.4983951\tbest: 1.4983951 (1500)\ttotal: 8.39s\tremaining: 4m 31s\n",
      "1600:\tlearn: 1.2346422\ttest: 1.4266905\ttest1: 1.4960926\tbest: 1.4959838 (1597)\ttotal: 8.96s\tremaining: 4m 30s\n",
      "1700:\tlearn: 1.2154525\ttest: 1.4134113\ttest1: 1.4948671\tbest: 1.4948671 (1700)\ttotal: 9.51s\tremaining: 4m 30s\n",
      "1800:\tlearn: 1.1973786\ttest: 1.4005623\ttest1: 1.4933254\tbest: 1.4933254 (1800)\ttotal: 10s\tremaining: 4m 28s\n",
      "1900:\tlearn: 1.1810427\ttest: 1.3896646\ttest1: 1.4915053\tbest: 1.4913319 (1894)\ttotal: 10.5s\tremaining: 4m 26s\n",
      "2000:\tlearn: 1.1666422\ttest: 1.3801209\ttest1: 1.4912863\tbest: 1.4908836 (1979)\ttotal: 11.1s\tremaining: 4m 25s\n",
      "2100:\tlearn: 1.1519647\ttest: 1.3713064\ttest1: 1.4905452\tbest: 1.4904237 (2067)\ttotal: 11.6s\tremaining: 4m 24s\n",
      "2200:\tlearn: 1.1398123\ttest: 1.3644239\ttest1: 1.4907344\tbest: 1.4904237 (2067)\ttotal: 12.1s\tremaining: 4m 23s\n",
      "2300:\tlearn: 1.1270052\ttest: 1.3567060\ttest1: 1.4902746\tbest: 1.4901918 (2281)\ttotal: 12.7s\tremaining: 4m 22s\n",
      "2400:\tlearn: 1.1138761\ttest: 1.3482785\ttest1: 1.4899269\tbest: 1.4895367 (2378)\ttotal: 13.2s\tremaining: 4m 21s\n",
      "2500:\tlearn: 1.1024496\ttest: 1.3424520\ttest1: 1.4902451\tbest: 1.4895367 (2378)\ttotal: 13.7s\tremaining: 4m 20s\n",
      "2600:\tlearn: 1.0909389\ttest: 1.3365441\ttest1: 1.4903911\tbest: 1.4895367 (2378)\ttotal: 14.3s\tremaining: 4m 21s\n",
      "2700:\tlearn: 1.0809820\ttest: 1.3309686\ttest1: 1.4905086\tbest: 1.4895367 (2378)\ttotal: 14.9s\tremaining: 4m 20s\n",
      "2800:\tlearn: 1.0706573\ttest: 1.3244734\ttest1: 1.4912610\tbest: 1.4895367 (2378)\ttotal: 15.4s\tremaining: 4m 19s\n",
      "Stopped by overfitting detector  (500 iterations wait)\n",
      "\n",
      "bestTest = 1.489536749\n",
      "bestIteration = 2378\n",
      "\n",
      "Shrink model to first 2379 iterations.\n",
      "err:  1.4895367489695042\n",
      "0:\tlearn: 2.5712077\ttest: 2.5727862\ttest1: 2.1472461\tbest: 2.1472461 (0)\ttotal: 11.4ms\tremaining: 9m 29s\n",
      "100:\tlearn: 2.2149027\ttest: 2.2554039\ttest1: 2.0151197\tbest: 2.0151197 (100)\ttotal: 553ms\tremaining: 4m 33s\n",
      "200:\tlearn: 2.0113819\ttest: 2.0773967\ttest1: 1.9660501\tbest: 1.9658684 (199)\ttotal: 1.12s\tremaining: 4m 38s\n",
      "300:\tlearn: 1.8652683\ttest: 1.9450869\ttest1: 1.9586268\tbest: 1.9548497 (261)\ttotal: 1.68s\tremaining: 4m 36s\n",
      "400:\tlearn: 1.7468780\ttest: 1.8315096\ttest1: 1.9463145\tbest: 1.9447090 (391)\ttotal: 2.21s\tremaining: 4m 32s\n",
      "500:\tlearn: 1.6592621\ttest: 1.7479798\ttest1: 1.9427825\tbest: 1.9424143 (469)\ttotal: 2.75s\tremaining: 4m 32s\n",
      "600:\tlearn: 1.5954132\ttest: 1.6914920\ttest1: 1.9396547\tbest: 1.9391923 (519)\ttotal: 3.34s\tremaining: 4m 34s\n",
      "700:\tlearn: 1.5459798\ttest: 1.6564871\ttest1: 1.9336022\tbest: 1.9335305 (698)\ttotal: 3.88s\tremaining: 4m 33s\n",
      "800:\tlearn: 1.4985210\ttest: 1.6166558\ttest1: 1.9270457\tbest: 1.9270457 (800)\ttotal: 4.42s\tremaining: 4m 31s\n",
      "900:\tlearn: 1.4599826\ttest: 1.5864519\ttest1: 1.9221389\tbest: 1.9218108 (899)\ttotal: 4.95s\tremaining: 4m 29s\n",
      "1000:\tlearn: 1.4286529\ttest: 1.5625155\ttest1: 1.9196269\tbest: 1.9182267 (987)\ttotal: 5.47s\tremaining: 4m 27s\n",
      "1100:\tlearn: 1.3939317\ttest: 1.5328882\ttest1: 1.9172844\tbest: 1.9172844 (1100)\ttotal: 6.01s\tremaining: 4m 27s\n",
      "1200:\tlearn: 1.3624168\ttest: 1.5045304\ttest1: 1.9159336\tbest: 1.9159336 (1200)\ttotal: 6.6s\tremaining: 4m 28s\n",
      "1300:\tlearn: 1.3360404\ttest: 1.4816006\ttest1: 1.9146168\tbest: 1.9146168 (1300)\ttotal: 7.15s\tremaining: 4m 27s\n",
      "1400:\tlearn: 1.3125234\ttest: 1.4612889\ttest1: 1.9124250\tbest: 1.9121466 (1396)\ttotal: 7.78s\tremaining: 4m 29s\n",
      "1500:\tlearn: 1.2889639\ttest: 1.4425321\ttest1: 1.9130645\tbest: 1.9117741 (1443)\ttotal: 8.34s\tremaining: 4m 29s\n",
      "1600:\tlearn: 1.2716703\ttest: 1.4294047\ttest1: 1.9112585\tbest: 1.9104432 (1584)\ttotal: 8.93s\tremaining: 4m 30s\n",
      "1700:\tlearn: 1.2541366\ttest: 1.4159336\ttest1: 1.9106380\tbest: 1.9100575 (1671)\ttotal: 9.51s\tremaining: 4m 29s\n",
      "1800:\tlearn: 1.2366099\ttest: 1.4040361\ttest1: 1.9086683\tbest: 1.9086683 (1800)\ttotal: 10s\tremaining: 4m 28s\n",
      "1900:\tlearn: 1.2198707\ttest: 1.3918020\ttest1: 1.9075969\tbest: 1.9071596 (1852)\ttotal: 10.7s\tremaining: 4m 31s\n",
      "2000:\tlearn: 1.2051188\ttest: 1.3819617\ttest1: 1.9049097\tbest: 1.9048955 (1999)\ttotal: 11.6s\tremaining: 4m 37s\n",
      "2100:\tlearn: 1.1912486\ttest: 1.3727204\ttest1: 1.9022646\tbest: 1.9020940 (2099)\ttotal: 12.4s\tremaining: 4m 41s\n",
      "2200:\tlearn: 1.1755959\ttest: 1.3619141\ttest1: 1.9025985\tbest: 1.9020940 (2099)\ttotal: 13.1s\tremaining: 4m 45s\n",
      "2300:\tlearn: 1.1618578\ttest: 1.3513105\ttest1: 1.9022976\tbest: 1.9020940 (2099)\ttotal: 13.8s\tremaining: 4m 46s\n",
      "2400:\tlearn: 1.1473934\ttest: 1.3415840\ttest1: 1.8992973\tbest: 1.8992730 (2399)\ttotal: 14.4s\tremaining: 4m 45s\n",
      "2500:\tlearn: 1.1344883\ttest: 1.3340862\ttest1: 1.8971774\tbest: 1.8969402 (2495)\ttotal: 15s\tremaining: 4m 43s\n",
      "2600:\tlearn: 1.1228502\ttest: 1.3265575\ttest1: 1.8949115\tbest: 1.8949115 (2600)\ttotal: 15.5s\tremaining: 4m 43s\n",
      "2700:\tlearn: 1.1105076\ttest: 1.3188233\ttest1: 1.8937683\tbest: 1.8934103 (2682)\ttotal: 16.2s\tremaining: 4m 43s\n",
      "2800:\tlearn: 1.0983119\ttest: 1.3112860\ttest1: 1.8913725\tbest: 1.8913725 (2800)\ttotal: 16.8s\tremaining: 4m 43s\n",
      "2900:\tlearn: 1.0873168\ttest: 1.3047077\ttest1: 1.8896794\tbest: 1.8896794 (2900)\ttotal: 17.4s\tremaining: 4m 42s\n",
      "3000:\tlearn: 1.0773641\ttest: 1.2991490\ttest1: 1.8895318\tbest: 1.8889985 (2976)\ttotal: 18s\tremaining: 4m 41s\n",
      "3100:\tlearn: 1.0664148\ttest: 1.2929302\ttest1: 1.8888728\tbest: 1.8888296 (3099)\ttotal: 18.6s\tremaining: 4m 41s\n",
      "3200:\tlearn: 1.0568917\ttest: 1.2876520\ttest1: 1.8872854\tbest: 1.8870996 (3163)\ttotal: 19.2s\tremaining: 4m 40s\n",
      "3300:\tlearn: 1.0481276\ttest: 1.2837057\ttest1: 1.8849944\tbest: 1.8847841 (3292)\ttotal: 20s\tremaining: 4m 43s\n",
      "3400:\tlearn: 1.0383390\ttest: 1.2783370\ttest1: 1.8835739\tbest: 1.8834968 (3388)\ttotal: 20.9s\tremaining: 4m 46s\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3500:\tlearn: 1.0294856\ttest: 1.2735980\ttest1: 1.8822205\tbest: 1.8819156 (3490)\ttotal: 21.5s\tremaining: 4m 45s\n",
      "3600:\tlearn: 1.0202838\ttest: 1.2686719\ttest1: 1.8813542\tbest: 1.8813542 (3600)\ttotal: 22.5s\tremaining: 4m 49s\n",
      "3700:\tlearn: 1.0113355\ttest: 1.2638204\ttest1: 1.8801607\tbest: 1.8801350 (3699)\ttotal: 23.4s\tremaining: 4m 52s\n",
      "3800:\tlearn: 1.0034841\ttest: 1.2600237\ttest1: 1.8788724\tbest: 1.8788724 (3800)\ttotal: 24s\tremaining: 4m 51s\n",
      "3900:\tlearn: 0.9944934\ttest: 1.2545854\ttest1: 1.8771599\tbest: 1.8771599 (3900)\ttotal: 24.5s\tremaining: 4m 50s\n",
      "4000:\tlearn: 0.9856067\ttest: 1.2497931\ttest1: 1.8767395\tbest: 1.8763067 (3970)\ttotal: 25.4s\tremaining: 4m 52s\n",
      "4100:\tlearn: 0.9782408\ttest: 1.2468153\ttest1: 1.8754962\tbest: 1.8754962 (4100)\ttotal: 26s\tremaining: 4m 51s\n",
      "4200:\tlearn: 0.9696325\ttest: 1.2425086\ttest1: 1.8753874\tbest: 1.8748002 (4149)\ttotal: 26.9s\tremaining: 4m 53s\n",
      "4300:\tlearn: 0.9618916\ttest: 1.2382791\ttest1: 1.8755580\tbest: 1.8748002 (4149)\ttotal: 27.6s\tremaining: 4m 53s\n",
      "4400:\tlearn: 0.9529349\ttest: 1.2332721\ttest1: 1.8750968\tbest: 1.8748002 (4149)\ttotal: 28.4s\tremaining: 4m 53s\n",
      "4500:\tlearn: 0.9460551\ttest: 1.2302874\ttest1: 1.8749971\tbest: 1.8748002 (4149)\ttotal: 29.2s\tremaining: 4m 55s\n",
      "4600:\tlearn: 0.9387943\ttest: 1.2262262\ttest1: 1.8747613\tbest: 1.8747613 (4600)\ttotal: 29.8s\tremaining: 4m 53s\n",
      "4700:\tlearn: 0.9312021\ttest: 1.2223270\ttest1: 1.8741039\tbest: 1.8735991 (4684)\ttotal: 30.4s\tremaining: 4m 52s\n",
      "4800:\tlearn: 0.9237453\ttest: 1.2192864\ttest1: 1.8731455\tbest: 1.8731455 (4800)\ttotal: 31s\tremaining: 4m 51s\n",
      "4900:\tlearn: 0.9161128\ttest: 1.2157156\ttest1: 1.8729297\tbest: 1.8724982 (4842)\ttotal: 31.6s\tremaining: 4m 50s\n",
      "5000:\tlearn: 0.9094122\ttest: 1.2122589\ttest1: 1.8729861\tbest: 1.8724982 (4842)\ttotal: 32.2s\tremaining: 4m 49s\n",
      "5100:\tlearn: 0.9024405\ttest: 1.2087994\ttest1: 1.8719495\tbest: 1.8719429 (5098)\ttotal: 32.8s\tremaining: 4m 48s\n",
      "5200:\tlearn: 0.8943778\ttest: 1.2054894\ttest1: 1.8710557\tbest: 1.8707095 (5177)\ttotal: 33.4s\tremaining: 4m 47s\n",
      "5300:\tlearn: 0.8878035\ttest: 1.2025099\ttest1: 1.8696452\tbest: 1.8695800 (5297)\ttotal: 34s\tremaining: 4m 46s\n",
      "5400:\tlearn: 0.8804253\ttest: 1.1990755\ttest1: 1.8692693\tbest: 1.8691090 (5340)\ttotal: 34.6s\tremaining: 4m 45s\n",
      "5500:\tlearn: 0.8733564\ttest: 1.1956868\ttest1: 1.8684046\tbest: 1.8684046 (5500)\ttotal: 35.2s\tremaining: 4m 44s\n",
      "5600:\tlearn: 0.8668758\ttest: 1.1928179\ttest1: 1.8683911\tbest: 1.8681147 (5554)\ttotal: 35.8s\tremaining: 4m 43s\n",
      "5700:\tlearn: 0.8610645\ttest: 1.1902811\ttest1: 1.8683394\tbest: 1.8681147 (5554)\ttotal: 36.5s\tremaining: 4m 43s\n",
      "5800:\tlearn: 0.8546095\ttest: 1.1874719\ttest1: 1.8685097\tbest: 1.8681147 (5554)\ttotal: 37.1s\tremaining: 4m 42s\n",
      "5900:\tlearn: 0.8476646\ttest: 1.1842892\ttest1: 1.8681592\tbest: 1.8680895 (5871)\ttotal: 37.7s\tremaining: 4m 41s\n",
      "6000:\tlearn: 0.8414654\ttest: 1.1816460\ttest1: 1.8681926\tbest: 1.8677842 (5942)\ttotal: 38.3s\tremaining: 4m 40s\n",
      "6100:\tlearn: 0.8350629\ttest: 1.1789366\ttest1: 1.8676356\tbest: 1.8675294 (6074)\ttotal: 38.9s\tremaining: 4m 39s\n",
      "6200:\tlearn: 0.8293214\ttest: 1.1769522\ttest1: 1.8673973\tbest: 1.8673532 (6164)\ttotal: 39.5s\tremaining: 4m 38s\n",
      "6300:\tlearn: 0.8230002\ttest: 1.1742449\ttest1: 1.8675737\tbest: 1.8673296 (6259)\ttotal: 40.1s\tremaining: 4m 37s\n",
      "6400:\tlearn: 0.8175665\ttest: 1.1719519\ttest1: 1.8670774\tbest: 1.8670269 (6391)\ttotal: 40.7s\tremaining: 4m 37s\n",
      "6500:\tlearn: 0.8112225\ttest: 1.1689515\ttest1: 1.8671035\tbest: 1.8670031 (6408)\ttotal: 41.3s\tremaining: 4m 36s\n",
      "6600:\tlearn: 0.8061363\ttest: 1.1664812\ttest1: 1.8666076\tbest: 1.8666076 (6600)\ttotal: 42s\tremaining: 4m 35s\n",
      "6700:\tlearn: 0.8003889\ttest: 1.1637230\ttest1: 1.8668963\tbest: 1.8664576 (6624)\ttotal: 42.5s\tremaining: 4m 34s\n",
      "6800:\tlearn: 0.7948418\ttest: 1.1614651\ttest1: 1.8669493\tbest: 1.8664576 (6624)\ttotal: 43.1s\tremaining: 4m 34s\n",
      "6900:\tlearn: 0.7893465\ttest: 1.1588345\ttest1: 1.8666528\tbest: 1.8664576 (6624)\ttotal: 43.7s\tremaining: 4m 33s\n",
      "7000:\tlearn: 0.7837611\ttest: 1.1565114\ttest1: 1.8667910\tbest: 1.8664576 (6624)\ttotal: 44.3s\tremaining: 4m 32s\n",
      "7100:\tlearn: 0.7779637\ttest: 1.1544163\ttest1: 1.8665678\tbest: 1.8664453 (7073)\ttotal: 45s\tremaining: 4m 31s\n",
      "7200:\tlearn: 0.7725948\ttest: 1.1519827\ttest1: 1.8666553\tbest: 1.8663617 (7127)\ttotal: 45.6s\tremaining: 4m 30s\n",
      "7300:\tlearn: 0.7665381\ttest: 1.1492635\ttest1: 1.8663753\tbest: 1.8661944 (7296)\ttotal: 46.2s\tremaining: 4m 30s\n",
      "7400:\tlearn: 0.7608164\ttest: 1.1464495\ttest1: 1.8670009\tbest: 1.8661944 (7296)\ttotal: 46.8s\tremaining: 4m 29s\n",
      "7500:\tlearn: 0.7557677\ttest: 1.1443015\ttest1: 1.8672053\tbest: 1.8661944 (7296)\ttotal: 47.4s\tremaining: 4m 28s\n",
      "7600:\tlearn: 0.7506572\ttest: 1.1420555\ttest1: 1.8672278\tbest: 1.8661944 (7296)\ttotal: 48s\tremaining: 4m 27s\n",
      "7700:\tlearn: 0.7454751\ttest: 1.1397447\ttest1: 1.8673574\tbest: 1.8661944 (7296)\ttotal: 48.6s\tremaining: 4m 27s\n",
      "Stopped by overfitting detector  (500 iterations wait)\n",
      "\n",
      "bestTest = 1.866194376\n",
      "bestIteration = 7296\n",
      "\n",
      "Shrink model to first 7297 iterations.\n",
      "err:  1.866194392328968\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "1.8735622699564076"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "err=[]\n",
    "y_pred_totcb=[]\n",
    "\n",
    "fold=KFold(n_splits=5, random_state=1234)\n",
    "for train_index, test_index in fold.split(X,y):\n",
    "    X_train, X_test = X.iloc[train_index], X.iloc[test_index]\n",
    "    y_train, y_test = y.iloc[train_index], y.iloc[test_index]\n",
    "    m1 = CatBoostRegressor(iterations=50000, learning_rate=0.01, random_seed=1234, eval_metric='RMSE')\n",
    "    m1.fit(X_train,y_train,eval_set=[(X_train,y_train),(X_test, y_test)], early_stopping_rounds=500,verbose=100,cat_features=cate_features_index)\n",
    "    preds = m1.predict(X_test)\n",
    "    print(\"err: \",np.sqrt(mean_squared_error(y_test,preds)))\n",
    "    err.append(np.sqrt(mean_squared_error(y_test,preds)))\n",
    "    p2 = m1.predict(tes)\n",
    "    y_pred_totcb.append(p2)\n",
    "np.mean(err)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "col = ['CONSOLE','CATEGORY','PUBLISHER','RATING']\n",
    "for i in col:\n",
    "    X[col] = X[col].astype('category')\n",
    "    tes[col] = tes[col].astype('category')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training until validation scores don't improve for 500 rounds\n",
      "[100]\ttraining's l2: 5.43639\tvalid_1's l2: 2.52519\n",
      "[200]\ttraining's l2: 4.74461\tvalid_1's l2: 2.39104\n",
      "[300]\ttraining's l2: 4.19516\tvalid_1's l2: 2.33957\n",
      "[400]\ttraining's l2: 3.77845\tvalid_1's l2: 2.38257\n",
      "[500]\ttraining's l2: 3.49073\tvalid_1's l2: 2.42447\n",
      "[600]\ttraining's l2: 3.2497\tvalid_1's l2: 2.46853\n",
      "[700]\ttraining's l2: 3.03947\tvalid_1's l2: 2.50996\n",
      "[800]\ttraining's l2: 2.85681\tvalid_1's l2: 2.55461\n",
      "Early stopping, best iteration is:\n",
      "[303]\ttraining's l2: 4.17824\tvalid_1's l2: 2.33767\n",
      "err:  1.5289446531512123\n",
      "Training until validation scores don't improve for 500 rounds\n",
      "[100]\ttraining's l2: 3.11981\tvalid_1's l2: 13.6532\n",
      "[200]\ttraining's l2: 2.57603\tvalid_1's l2: 12.7584\n",
      "[300]\ttraining's l2: 2.22627\tvalid_1's l2: 12.1811\n",
      "[400]\ttraining's l2: 2.00431\tvalid_1's l2: 11.8451\n",
      "[500]\ttraining's l2: 1.81841\tvalid_1's l2: 11.4579\n",
      "[600]\ttraining's l2: 1.6707\tvalid_1's l2: 11.1816\n",
      "[700]\ttraining's l2: 1.54597\tvalid_1's l2: 10.9342\n",
      "[800]\ttraining's l2: 1.43513\tvalid_1's l2: 10.7798\n",
      "[900]\ttraining's l2: 1.33716\tvalid_1's l2: 10.6314\n",
      "[1000]\ttraining's l2: 1.25023\tvalid_1's l2: 10.5563\n",
      "Did not meet early stopping. Best iteration is:\n",
      "[1000]\ttraining's l2: 1.25023\tvalid_1's l2: 10.5563\n",
      "err:  3.2490407210529413\n",
      "Training until validation scores don't improve for 500 rounds\n",
      "[100]\ttraining's l2: 5.27787\tvalid_1's l2: 3.32795\n",
      "[200]\ttraining's l2: 4.56758\tvalid_1's l2: 2.98062\n",
      "[300]\ttraining's l2: 4.10021\tvalid_1's l2: 2.79206\n",
      "[400]\ttraining's l2: 3.76897\tvalid_1's l2: 2.67053\n",
      "[500]\ttraining's l2: 3.49252\tvalid_1's l2: 2.54669\n",
      "[600]\ttraining's l2: 3.27035\tvalid_1's l2: 2.45575\n",
      "[700]\ttraining's l2: 3.08825\tvalid_1's l2: 2.38047\n",
      "[800]\ttraining's l2: 2.92225\tvalid_1's l2: 2.31851\n",
      "[900]\ttraining's l2: 2.7818\tvalid_1's l2: 2.26165\n",
      "[1000]\ttraining's l2: 2.659\tvalid_1's l2: 2.21663\n",
      "Did not meet early stopping. Best iteration is:\n",
      "[1000]\ttraining's l2: 2.659\tvalid_1's l2: 2.21663\n",
      "err:  1.4888364207149034\n",
      "Training until validation scores don't improve for 500 rounds\n",
      "[100]\ttraining's l2: 5.37447\tvalid_1's l2: 3.71424\n",
      "[200]\ttraining's l2: 4.60796\tvalid_1's l2: 3.48539\n",
      "[300]\ttraining's l2: 4.10391\tvalid_1's l2: 3.33654\n",
      "[400]\ttraining's l2: 3.7319\tvalid_1's l2: 3.19583\n",
      "[500]\ttraining's l2: 3.44737\tvalid_1's l2: 3.08919\n",
      "[600]\ttraining's l2: 3.2149\tvalid_1's l2: 3.02275\n",
      "[700]\ttraining's l2: 3.01477\tvalid_1's l2: 2.98591\n",
      "[800]\ttraining's l2: 2.83997\tvalid_1's l2: 2.97332\n",
      "[900]\ttraining's l2: 2.6953\tvalid_1's l2: 2.96719\n",
      "[1000]\ttraining's l2: 2.56285\tvalid_1's l2: 2.95195\n",
      "Did not meet early stopping. Best iteration is:\n",
      "[1000]\ttraining's l2: 2.56285\tvalid_1's l2: 2.95195\n",
      "err:  1.7181228081238702\n",
      "Training until validation scores don't improve for 500 rounds\n",
      "[100]\ttraining's l2: 5.43804\tvalid_1's l2: 3.81172\n",
      "[200]\ttraining's l2: 4.7225\tvalid_1's l2: 3.54692\n",
      "[300]\ttraining's l2: 4.13149\tvalid_1's l2: 3.49583\n",
      "[400]\ttraining's l2: 3.73501\tvalid_1's l2: 3.50704\n",
      "[500]\ttraining's l2: 3.43352\tvalid_1's l2: 3.53359\n",
      "[600]\ttraining's l2: 3.19294\tvalid_1's l2: 3.57017\n",
      "[700]\ttraining's l2: 2.99713\tvalid_1's l2: 3.60933\n",
      "[800]\ttraining's l2: 2.82993\tvalid_1's l2: 3.65878\n",
      "Early stopping, best iteration is:\n",
      "[308]\ttraining's l2: 4.0924\tvalid_1's l2: 3.49278\n",
      "err:  1.868897160927326\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "1.9707683527940507"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "err1=[]\n",
    "y_pred_totcb1=[]\n",
    "\n",
    "fold=KFold(n_splits=5, random_state=1234)\n",
    "for train_index, test_index in fold.split(X,y):\n",
    "    X_train, X_test = X.iloc[train_index], X.iloc[test_index]\n",
    "    y_train, y_test = y.iloc[train_index], y.iloc[test_index]\n",
    "    m2 = LGBMRegressor(n_estimators=1000, max_depth=-1, learning_rate=0.006, random_state=42)\n",
    "    m2.fit(X_train,y_train,eval_set=[(X_train,y_train),(X_test, y_test)], early_stopping_rounds=500,verbose=100,)\n",
    "    preds = m2.predict(X_test)\n",
    "    print(\"err: \",np.sqrt(mean_squared_error(y_test,preds)))\n",
    "    err1.append(np.sqrt(mean_squared_error(y_test,preds)))\n",
    "    p2 = m2.predict(tes)\n",
    "    y_pred_totcb1.append(p2)\n",
    "np.mean(err1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "X['RATING'] = X['RATING'].replace({'RP':'T', 'K-A':'T'})\n",
    "tes['RATING'] = tes['RATING'].replace({'AO':'T'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = pd.get_dummies(data=X, columns=['RATING','CATEGORY'], drop_first=True)\n",
    "tes = pd.get_dummies(data=tes, columns=['RATING','CATEGORY'], drop_first=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import LabelEncoder\n",
    "encode = ['PUBLISHER','CONSOLE']\n",
    "le = LabelEncoder()\n",
    "for col in encode:\n",
    "    X[col] = le.fit_transform(X[col])\n",
    "    tes[col] = le.fit_transform(tes[col])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\tvalidation_0-rmse:3.01102\tvalidation_1-rmse:2.32145\n",
      "Multiple eval metrics have been passed: 'validation_1-rmse' will be used for early stopping.\n",
      "\n",
      "Will train until validation_1-rmse hasn't improved in 100 rounds.\n",
      "[100]\tvalidation_0-rmse:1.10089\tvalidation_1-rmse:1.70253\n",
      "Stopping. Best iteration:\n",
      "[23]\tvalidation_0-rmse:1.66565\tvalidation_1-rmse:1.61735\n",
      "\n",
      "err:  1.6173494288756791\n",
      "[0]\tvalidation_0-rmse:2.48180\tvalidation_1-rmse:4.20740\n",
      "Multiple eval metrics have been passed: 'validation_1-rmse' will be used for early stopping.\n",
      "\n",
      "Will train until validation_1-rmse hasn't improved in 100 rounds.\n",
      "[100]\tvalidation_0-rmse:1.05123\tvalidation_1-rmse:3.31243\n",
      "[200]\tvalidation_0-rmse:0.88310\tvalidation_1-rmse:3.30233\n",
      "[300]\tvalidation_0-rmse:0.75930\tvalidation_1-rmse:3.29648\n",
      "[400]\tvalidation_0-rmse:0.66105\tvalidation_1-rmse:3.29282\n",
      "Stopping. Best iteration:\n",
      "[382]\tvalidation_0-rmse:0.67557\tvalidation_1-rmse:3.29138\n",
      "\n",
      "err:  3.291379744869903\n",
      "[0]\tvalidation_0-rmse:2.96814\tvalidation_1-rmse:2.53844\n",
      "Multiple eval metrics have been passed: 'validation_1-rmse' will be used for early stopping.\n",
      "\n",
      "Will train until validation_1-rmse hasn't improved in 100 rounds.\n",
      "[100]\tvalidation_0-rmse:1.15393\tvalidation_1-rmse:1.69930\n",
      "[200]\tvalidation_0-rmse:0.98805\tvalidation_1-rmse:1.69324\n",
      "[300]\tvalidation_0-rmse:0.84290\tvalidation_1-rmse:1.68537\n",
      "Stopping. Best iteration:\n",
      "[264]\tvalidation_0-rmse:0.88891\tvalidation_1-rmse:1.68245\n",
      "\n",
      "err:  1.6824530411692706\n",
      "[0]\tvalidation_0-rmse:2.97270\tvalidation_1-rmse:2.54787\n",
      "Multiple eval metrics have been passed: 'validation_1-rmse' will be used for early stopping.\n",
      "\n",
      "Will train until validation_1-rmse hasn't improved in 100 rounds.\n",
      "[100]\tvalidation_0-rmse:1.10330\tvalidation_1-rmse:2.15666\n",
      "[200]\tvalidation_0-rmse:0.91845\tvalidation_1-rmse:2.12381\n",
      "[300]\tvalidation_0-rmse:0.79985\tvalidation_1-rmse:2.11791\n",
      "[400]\tvalidation_0-rmse:0.68891\tvalidation_1-rmse:2.11136\n",
      "Stopping. Best iteration:\n",
      "[372]\tvalidation_0-rmse:0.71986\tvalidation_1-rmse:2.11061\n",
      "\n",
      "err:  2.110606856885603\n",
      "[0]\tvalidation_0-rmse:2.95894\tvalidation_1-rmse:2.59797\n",
      "Multiple eval metrics have been passed: 'validation_1-rmse' will be used for early stopping.\n",
      "\n",
      "Will train until validation_1-rmse hasn't improved in 100 rounds.\n",
      "[100]\tvalidation_0-rmse:1.11553\tvalidation_1-rmse:1.84880\n",
      "Stopping. Best iteration:\n",
      "[40]\tvalidation_0-rmse:1.38852\tvalidation_1-rmse:1.83001\n",
      "\n",
      "err:  1.8300116705383618\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2.1063601484677634"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "err2=[]\n",
    "y_pred_totcb2=[]\n",
    "\n",
    "fold=KFold(n_splits=5, random_state=1234)\n",
    "for train_index, test_index in fold.split(X,y):\n",
    "    X_train, X_test = X.iloc[train_index], X.iloc[test_index]\n",
    "    y_train, y_test = y.iloc[train_index], y.iloc[test_index]\n",
    "    m3 = XGBRegressor(n_estimators=1000, max_depth=5, learning_rate=0.07, random_state=42)\n",
    "    m3.fit(X_train,y_train,eval_set=[(X_train,y_train),(X_test, y_test)], early_stopping_rounds=100,verbose=100,)\n",
    "    preds = m3.predict(X_test)\n",
    "    print(\"err: \",np.sqrt(mean_squared_error(y_test,preds)))\n",
    "    err2.append(np.sqrt(mean_squared_error(y_test,preds)))\n",
    "    p2 = m3.predict(tes)\n",
    "    y_pred_totcb2.append(p2)\n",
    "np.mean(err2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "## Check for the feature importance \n",
    "fea_imp = pd.DataFrame({'imp':m3.feature_importances_, 'col': X.columns})\n",
    "fea_imp = fea_imp.sort_values(['imp', 'col'], ascending=[True, False]).iloc[-30:]\n",
    "_ = fea_imp.plot(kind='barh', x='col', y='imp', figsize=(20, 10))\n",
    "plt.savefig('catboost_feature_importance.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "predic1 = np.mean(y_pred_totcb, 0)\n",
    "predic2 = np.mean(y_pred_totcb1, 0)\n",
    "predic3 = np.mean(y_pred_totcb2, 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = {\"SalesInMillions\": predic1}\n",
    "b = {\"SalesInMillions\": predic2}\n",
    "c = {\"SalesInMillions\": predic3}\n",
    "\n",
    "sub1 = pd.DataFrame(data=a)\n",
    "sub2 = pd.DataFrame(data=b)\n",
    "sub3 = pd.DataFrame(data=c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SalesInMillions</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>1.720739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>2.009305</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>3.350372</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>1.961982</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>2.050956</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SalesInMillions\n",
       "0         1.720739\n",
       "1         2.009305\n",
       "2         3.350372\n",
       "3         1.961982\n",
       "4         2.050956"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sub1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SalesInMillions</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>1.936299</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>2.517155</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>3.523646</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>1.962767</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>1.883871</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SalesInMillions\n",
       "0         1.936299\n",
       "1         2.517155\n",
       "2         3.523646\n",
       "3         1.962767\n",
       "4         1.883871"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sub2.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SalesInMillions</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>1.402619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>2.203543</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>2.774559</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>1.693101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>2.365861</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SalesInMillions\n",
       "0         1.402619\n",
       "1         2.203543\n",
       "2         2.774559\n",
       "3         1.693101\n",
       "4         2.365861"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sub3.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Averaging"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "ave = 0.8*sub1 + 0.2*sub3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SalesInMillions</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>1.657115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>2.048153</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>3.235209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>1.908206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>2.113937</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SalesInMillions\n",
       "0         1.657115\n",
       "1         2.048153\n",
       "2         3.235209\n",
       "3         1.908206\n",
       "4         2.113937"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ave.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "ave.to_csv('submission.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
